@@ -31,7 +31,7 @@ module Agents |
||
| 31 | 31 |
|
| 32 | 32 |
`google` `service_account_email` - The authorised service account. |
| 33 | 33 |
|
| 34 |
- `google` `key_file` - The path to the key file. |
|
| 34 |
+ `google` `key_file` OR `google` `key` - The path to the key file or the key itself. Liquid formatting is supported if you want to use a Credential. (E.g., `{% credential google_key %}`)
|
|
| 35 | 35 |
|
| 36 | 36 |
`google` `key_secret` - The secret for the key, typically 'notasecret' |
| 37 | 37 |
|
@@ -91,7 +91,7 @@ module Agents |
||
| 91 | 91 |
|
| 92 | 92 |
def receive(incoming_events) |
| 93 | 93 |
incoming_events.each do |event| |
| 94 |
- calendar = GoogleCalendar.new(options, Rails.logger) |
|
| 94 |
+ calendar = GoogleCalendar.new(interpolate_options(options, event), Rails.logger) |
|
| 95 | 95 |
|
| 96 | 96 |
calendar_event = JSON.parse(calendar.publish_as(interpolated(event)['calendar_id'], event.payload["message"]).response.body) |
| 97 | 97 |
|
@@ -1,7 +1,13 @@ |
||
| 1 | 1 |
class GoogleCalendar |
| 2 | 2 |
def initialize(config, logger) |
| 3 | 3 |
@config = config |
| 4 |
- @key = Google::APIClient::PKCS12.load_key(@config['google']['key_file'], @config['google']['key_secret']) |
|
| 4 |
+ |
|
| 5 |
+ if @config['google']['key'].present? |
|
| 6 |
+ @key = OpenSSL::PKCS12.new(@config['google']['key'], @config['google']['key_secret']).key |
|
| 7 |
+ else |
|
| 8 |
+ @key = Google::APIClient::PKCS12.load_key(@config['google']['key_file'], @config['google']['key_secret']) |
|
| 9 |
+ end |
|
| 10 |
+ |
|
| 5 | 11 |
@client = Google::APIClient.new(application_name: "Huginn", application_version: "0.0.1") |
| 6 | 12 |
@client.retries = 2 |
| 7 | 13 |
@logger ||= logger |
@@ -60,4 +66,4 @@ class GoogleCalendar |
||
| 60 | 66 |
@logger.debug ret.to_yaml |
| 61 | 67 |
ret |
| 62 | 68 |
end |
| 63 |
-end |
|
| 69 |
+end |
@@ -70,14 +70,16 @@ describe Agents::GoogleCalendarPublishAgent, :vcr do |
||
| 70 | 70 |
}.to_json |
| 71 | 71 |
end |
| 72 | 72 |
|
| 73 |
- before do |
|
| 73 |
+ def setup_mock! |
|
| 74 | 74 |
fake_interface = Object.new |
| 75 |
- mock(GoogleCalendar).new(agent.options, Rails.logger) { fake_interface }
|
|
| 75 |
+ mock(GoogleCalendar).new(agent.interpolate_options(agent.options), Rails.logger) { fake_interface }
|
|
| 76 | 76 |
mock(fake_interface).publish_as(calendar_id, message) { stub!.response.stub!.body { response_body } }
|
| 77 | 77 |
end |
| 78 | 78 |
|
| 79 | 79 |
describe 'when the calendar_id is in the options' do |
| 80 | 80 |
it 'should publish any payload it receives' do |
| 81 |
+ setup_mock! |
|
| 82 |
+ |
|
| 81 | 83 |
expect {
|
| 82 | 84 |
agent.receive([event]) |
| 83 | 85 |
}.to change { agent.events.count }.by(1)
|
@@ -88,6 +90,8 @@ describe Agents::GoogleCalendarPublishAgent, :vcr do |
||
| 88 | 90 |
|
| 89 | 91 |
describe 'with Liquid templating' do |
| 90 | 92 |
it 'should allow Liquid in the calendar_id' do |
| 93 |
+ setup_mock! |
|
| 94 |
+ |
|
| 91 | 95 |
agent.options['calendar_id'] = '{{ cal_id }}'
|
| 92 | 96 |
agent.save! |
| 93 | 97 |
|
@@ -99,6 +103,22 @@ describe Agents::GoogleCalendarPublishAgent, :vcr do |
||
| 99 | 103 |
expect(agent.events.count).to eq(1) |
| 100 | 104 |
expect(agent.events.last.payload).to eq({ "success" => true, "published_calendar_event" => JSON.parse(response_body), "agent_id" => event.agent_id, "event_id" => event.id })
|
| 101 | 105 |
end |
| 106 |
+ |
|
| 107 |
+ it 'should allow Liquid in the key' do |
|
| 108 |
+ agent.options['google'].delete('key_file')
|
|
| 109 |
+ agent.options['google']['key'] = '{% credential google_key %}'
|
|
| 110 |
+ agent.save! |
|
| 111 |
+ |
|
| 112 |
+ users(:jane).user_credentials.create! credential_name: 'google_key', credential_value: 'something' |
|
| 113 |
+ |
|
| 114 |
+ agent.reload |
|
| 115 |
+ |
|
| 116 |
+ setup_mock! |
|
| 117 |
+ |
|
| 118 |
+ agent.receive([event]) |
|
| 119 |
+ |
|
| 120 |
+ expect(agent.events.count).to eq(1) |
|
| 121 |
+ end |
|
| 102 | 122 |
end |
| 103 | 123 |
end |
| 104 | 124 |
end |